package dbtask

import (
	"reflect"
	"github.com/astaxie/beego/orm"
	"fmt"
	"cloud_worm/util/umodels/mysqldb"
)

type CronTask struct {
	Id              int64
	Name            string          // 任务名
	TaskOwner       string          // 任务操作的人
	TaskType        int             // 任务类型：1：weapon下发的任务；2：其他普通的任务，由预定义Job实现
	Spec            string          // 任务的调度模式
	TargetType      int             // 目标类型
	Target          string          // 目标
	WeaponsName     string          // weapon相关
	Created int64
	Updated int64
	Status  int
}

func (w *CronTask) TableName() string {
	return reflect.TypeOf(*w).Name()
}

func (w *CronTask) Read(fields ...string) error {
	err := orm.NewOrm().Read(w, fields...)
	if err != nil {
		return fmt.Errorf("%s, %s", w.TableName(), err.Error())
	}
	return nil
}

func (w *CronTask) Update(fields ...string) error {
	_, err := orm.NewOrm().Update(w, fields...)
	if err != nil {
		return fmt.Errorf("%s, %s", w.TableName(), err.Error())
	}
	return nil
}

func (w *CronTask) Insert() error {
	_, err := orm.NewOrm().Insert(w)
	if err != nil {
		return fmt.Errorf("%s, %s", w.TableName(), err.Error())
	}

	return nil
}

func init()  {
	orm.RegisterModel(new(CronTask))
}

func (w *CronTask) Select(offset int, limit int, status int, name string, owner string, taskType int) ([]*CronTask, error) {
	qs := orm.NewOrm().QueryTable(w).Offset(offset).Limit(limit)
	if status != mysqldb.StatusAll {
		qs = qs.Filter("status", status)
	}

	if name != mysqldb.SelectStrAll {
		qs = qs.Filter("name__istartswith", name)
	}
	if owner != mysqldb.SelectStrAll {
		qs = qs.Filter("task_owner__istartswith", owner)
	}
	if taskType != mysqldb.SelectIntAll {
		qs = qs.Filter("task_type", taskType)
	}

	var crontasks []*CronTask
	_, err := qs.All(&crontasks)
	if err != nil {
		return nil, err
	}

	return crontasks, nil
}

func (w *CronTask) Count(status int, name string, owner string, taskType int) (int64, error) {
	qs := orm.NewOrm().QueryTable(w)
	if status != mysqldb.StatusAll {
		qs = qs.Filter("status", status)
	}

	if name != mysqldb.SelectStrAll {
		qs = qs.Filter("name__istartswith", name)
	}
	if owner != mysqldb.SelectStrAll {
		qs = qs.Filter("task_owner__istartswith", owner)
	}
	if taskType != mysqldb.SelectIntAll {
		qs = qs.Filter("task_type", taskType)
	}

	count, err := qs.Count()
	if err != nil {
		return 0, err
	}

	return count, nil
}